package com.example.fizzbuzz.entity;

import lombok.Data;

/**
 * @author duzhou
 * @version 2020/9/18
 */
@Data
public class Goods {

    public static final String 常规商品 = "常规商品";
    public static final String 陈年干酪 = "陈年干酪";
    public static final String 撒弗拉斯 = "撒弗拉斯";
    public static final String 后台门票 = "后台门票";

    private String name;     // 商品名称
    private double quality;  // 商品价值
    private int sellIn;      // 保质期

    public Goods(String name, double quality, int sellIn) {
        this.name = name;
        this.quality = quality;
        this.sellIn = sellIn;
    }

    // 日常更新
    public void updateByDay() {
        if (name.equals(Goods.陈年干酪)) {
            // 没过保
            if (sellIn > 0) qualityAddBy(1);
            // 已过保
            if(sellIn <= 0) qualityAddBy(2);
        }

        if (name.equals(Goods.常规商品)) {
            // 没过保质期，每天下滑1点
            if (sellIn > 0) qualityReduceBy(1);
            // 过了保质期，价值以双倍速度下滑
            if (sellIn <= 0) qualityReduceBy(2);
        }

        if (name.equals(Goods.后台门票)) {
            // 距离演出前10天之前，门票价值每天上升1点
            if (sellIn > 10) qualityAddBy(1);
            // 距离演出5~10天时间范围内，门票价值每天上升2点
            if(sellIn <= 10 && sellIn > 5) qualityAddBy(2);
            // 距离演出5天以内，门票价值每天上升3点
            if(sellIn <= 5 && sellIn >=1) qualityAddBy(3);
            // 到达演出当天，门票价值为0
            if(sellIn <= 0) quality = 0;
        }

        // 商品的价值永远不会小于0
        if(quality < 0) quality = 0;
        // 商品的价值永远不会大于50
        if(quality > 50) quality = 50;
        // 日常更新，保质期-1
        sellIn = sellIn - 1;
    }

    private void qualityReduceBy(int i) {
        quality = quality - i;
    }

    private void qualityAddBy(int i) {
        quality = quality + i;
    }
}
